Object-based storage is a computer data storage architecture that manages data as abstract objects, in contrast to other storage architectures such as block storage which manages data in blocks. Each object in an object-based storage architecture typically includes the data itself, metadata for the object, and a Global Unique IDentifier (GUID). Object-based storage can be implemented at the device level (e.g., object storage devices), the system level (e.g., applications that utilize objects), and the interface level (object management layers). Object storage systems generally excel at storing large amounts of unstructured data. In an object-based storage architecture, identifying individual objects is performed using the GUID.
An Object-based Storage Device (OSD) manages objects at the storage device level. An OSD organizes data as variable sized objects, rather than as fixed sized blocks. Each object includes data as a sequence of bytes and may include metadata which describes the object. OSD interfaces at the client level includes commands to create and delete objects, write bytes and read bytes to and from individual objects, and may have the ability to set and get attributes (e.g., access the metadata) on objects. Since objects are managed with a GUID, the OSD interacts with a host system using the GUID rather than at the block level. This abstraction allows the host system to be ambivalent regarding where or how an object is actually stored by an OSD.
When a host system is tasked with storing an object at an OSD, the host system provides the OSD with the object and a GUID. The OSD stores the object at persistent storage and internally references the data for the object with the GUID. When the host system is tasked with retrieving the object, the host system provides the GUID to the OSD. The OSD uses the GUID to identify where the object is stored at persistent storage, retrieves the object from the persistent storage, and provides the object to the host system (e.g., over a network). The host system then places the object in local memory to allow applications executing on the host system to interact with the object.
While object-based storage is efficient in abstracting the storage-level details from applications executing on the host system, object-based storage still relies on the host system to transfer objects from the OSD across the network and into local memory of the host system. This overhead may be detrimental to the performance of the host system, due to the processing overhead that the host system undertakes to perform this task. It therefore is desirable to enable the object-based storage architecture to operate more efficiently, while retaining the benefits of abstraction that are inherent in object-based storage architectures.